package com.grupobbva.seguridad.web.servlet.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.grupobbva.seguridad.domain.Usuario;
import com.grupobbva.seguridad.listener.SessionListener;
import com.grupobbva.seguridad.service.SeguridadService;
import com.grupobbva.seguridad.util.Constante;

@Controller
public class LoginController extends BaseController {
	
	
	private static final Logger log=Logger.getLogger(LoginController.class);
	
	@Autowired
	private SeguridadService seguridadService;
	
    @RequestMapping("/login.do")
    public String login(HttpServletRequest request) throws Exception {
    	String aplicacionId = request.getParameter("aplicacion");
    	String usuarioId    = request.getParameter("usuario");
    	String clave        = request.getParameter("clave");
    	String navegacion   = "login";
    	
    	try {
        	Usuario usuario = seguridadService.validarUsuario(Long.parseLong(aplicacionId), usuarioId, clave);
        	navegacion = LoginController.login(request, usuario);
		} catch (Exception e) {
			request.setAttribute("usuario", usuarioId);
			request.setAttribute("mensaje", e.getMessage());
			log.error(e.getMessage(),e);
		}
    	
    	return getRelativeURL(navegacion);
    }
	
    @RequestMapping("/logout.do")
    public String logout(HttpServletRequest request) throws Exception {
		//HttpSession session = request.getSession(false);
		//session.invalidate();
    	return getRelativeURL("logout");
    }
    
    public static String login(HttpServletRequest request, Usuario usuario) throws Exception {
    	//Creamos la sesion
    	HttpSession session = request.getSession(true);
    	session.setAttribute(Constante.USUARIO, usuario);
    	
    	//Para adaptar la validacion de los controles
		session.setAttribute(com.grupobbva.seguridad.client.util.Constante.SESSION_USUARIO, com.grupobbva.seguridad.client.service.SeguridadService.validarUsuario(usuario.getPerfil().getId().getAplicacionId(), usuario.getUsuarioId()));
		
		return BaseController.getNavigationMain(usuario);
    }
}
